home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGMISC / PCSSP.LZH / PC-SSP.ZIP / STATCORR.ZIP / CORRE.FOR < prev    next >
Text File  |  1985-11-29  |  6KB  |  214 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE CORRE
  5. C
  6. C        PURPOSE
  7. C           COMPUTE MEANS, STANDARD DEVIATIONS, SUMS OF CROSS-PRODUCTS
  8. C           OF DEVIATIONS, AND CORRELATION COEFFICIENTS.
  9. C
  10. C        USAGE
  11. C           CALL CORRE (N,M,IO,X,XBAR,STD,RX,R,B,D,T)
  12. C
  13. C        DESCRIPTION OF PARAMETERS
  14. C           N     - NUMBER OF OBSERVATIONS. N MUST BE > OR = TO 2.
  15. C           M     - NUMBER OF VARIABLES. M MUST BE > OR = TO 1.
  16. C           IO    - OPTION CODE FOR INPUT DATA
  17. C                   0 IF DATA ARE TO BE READ IN FROM INPUT DEVICE IN THE
  18. C                     SPECIAL SUBROUTINE NAMED DATA.  (SEE SUBROUTINES
  19. C                     USED BY THIS SUBROUTINE BELOW.)
  20. C                   1 IF ALL DATA ARE ALREADY IN CORE.
  21. C           X     - IF IO=0, THE VALUE OF X IS 0.0.
  22. C                   IF IO=1, X IS THE INPUT MATRIX (N BY M) CONTAINING
  23. C                            DATA.
  24. C           XBAR  - OUTPUT VECTOR OF LENGTH M CONTAINING MEANS.
  25. C           STD   - OUTPUT VECTOR OF LENGTH M CONTAINING STANDARD
  26. C                   DEVIATIONS.
  27. C           RX    - OUTPUT MATRIX (M X M) CONTAINING SUMS OF CROSS-
  28. C                   PRODUCTS OF DEVIATIONS FROM MEANS.
  29. C           R     - OUTPUT MATRIX (ONLY UPPER TRIANGULAR PORTION OF THE
  30. C                   SYMMETRIC MATRIX OF M BY M) CONTAINING CORRELATION
  31. C                   COEFFICIENTS.  (STORAGE MODE OF 1)
  32. C           B     - OUTPUT VECTOR OF LENGTH M CONTAINING THE DIAGONAL
  33. C                   OF THE MATRIX OF SUMS OF CROSS-PRODUCTS OF
  34. C                   DEVIATIONS FROM MEANS.
  35. C           D     - WORKING VECTOR OF LENGTH M.
  36. C           T     - WORKING VECTOR OF LENGTH M.
  37. C
  38. C        REMARKS
  39. C           CORRE WILL NOT ACCEPT A CONSTANT VECTOR.
  40. C
  41. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  42. C           DATA(M,D) - THIS SUBROUTINE MUST BE PROVIDED BY THE USER.
  43. C                       (1) IF IO=0, THIS SUBROUTINE IS EXPECTED TO
  44. C                           FURNISH AN OBSERVATION IN VECTOR D FROM AN
  45. C                           EXTERNAL INPUT DEVICE.
  46. C                       (2) IF IO=1, THIS SUBROUTINE IS NOT USED BY
  47. C                           CORRE BUT MUST EXIST IN JOB DECK. IF USER
  48. C                           HAS NOT SUPPLIED A SUBROUTINE NAMED DATA,
  49. C                           THE FOLLOWING IS SUGGESTED.
  50. C                                SUBROUTINE DATA
  51. C                                RETURN
  52. C                                END
  53. C
  54. C        METHOD
  55. C           PRODUCT-MOMENT CORRELATION COEFFICIENTS ARE COMPUTED.
  56. C
  57. C     ..................................................................
  58. C
  59.       SUBROUTINE CORRE (N,M,IO,X,XBAR,STD,RX,R,B,D,T)
  60.       DIMENSION X(1),XBAR(1),STD(1),RX(1),R(1),B(1),D(1),T(1)
  61. C
  62. C        ...............................................................
  63. C
  64. C        IF A DOUBLE PRECISION VERSION OF THIS ROUTINE IS DESIRED, THE
  65. C        C IN COLUMN 1 SHOULD BE REMOVED FROM THE DOUBLE PRECISION
  66. C        STATEMENT WHICH FOLLOWS.
  67. C
  68. C     DOUBLE PRECISION XBAR,STD,RX,R,B,T
  69. C
  70. C        THE C MUST ALSO BE REMOVED FROM DOUBLE PRECISION STATEMENTS
  71. C        APPEARING IN OTHER ROUTINES USED IN CONJUNCTION WITH THIS
  72. C        ROUTINE.
  73. C
  74. C        THE DOUBLE PRECISION VERSION OF THIS SUBROUTINE MUST ALSO
  75. C        CONTAIN DOUBLE PRECISION FORTRAN FUNCTIONS.  SQRT AND ABS IN
  76. C        STATEMENT 220 MUST BE CHANGED TO DSQRT AND DABS.
  77. C
  78. C        ...............................................................
  79. C
  80. C     INITIALIZATION
  81. C
  82.       DO 100 J=1,M
  83.       B(J)=0.0
  84.   100 T(J)=0.0
  85.       K=(M*M+M)/2
  86.       DO 102 I=1,K
  87.   102 R(I)=0.0
  88.       FN=N
  89.       L=0
  90. C
  91.       IF(IO) 105, 127, 105
  92. C
  93. C     DATA ARE ALREADY IN CORE
  94. C
  95.   105 DO 108 J=1,M
  96.       DO 107 I=1,N
  97.       L=L+1
  98.   107 T(J)=T(J)+X(L)
  99.       XBAR(J)=T(J)
  100.   108 T(J)=T(J)/FN
  101. C
  102.       DO 115 I=1,N
  103.       JK=0
  104.       L=I-N
  105.       DO 110 J=1,M
  106.       L=L+N
  107.       D(J)=X(L)-T(J)
  108.   110 B(J)=B(J)+D(J)
  109.       DO 115 J=1,M
  110.       DO 115 K=1,J
  111.       JK=JK+1
  112.   115 R(JK)=R(JK)+D(J)*D(K)
  113.       GO TO 205
  114. C
  115. C     READ OBSERVATIONS AND CALCULATE TEMPORARY
  116. C     MEANS FROM THESE DATA IN T(J)
  117. C
  118.   127 IF(N-M) 130, 130, 135
  119.   130 KK=N
  120.       GO TO 137
  121.   135 KK=M
  122.   137 DO 140 I=1,KK
  123.       CALL DATA (M,D)
  124.       DO 140 J=1,M
  125.       T(J)=T(J)+D(J)
  126.       L=L+1
  127.   140 RX(L)=D(J)
  128.       FKK=KK
  129.       DO 150 J=1,M
  130.       XBAR(J)=T(J)
  131.   150 T(J)=T(J)/FKK
  132. C
  133. C     CALCULATE SUMS OF CROSS-PRODUCTS OF DEVIATIONS
  134. C     FROM TEMPORARY MEANS FOR M OBSERVATIONS
  135. C
  136.       L=0
  137.       DO 180 I=1,KK
  138.       JK=0
  139.       DO 170 J=1,M
  140.       L=L+1
  141.   170 D(J)=RX(L)-T(J)
  142.       DO 180 J=1,M
  143.       B(J)=B(J)+D(J)
  144.       DO 180 K=1,J
  145.       JK=JK+1
  146.   180 R(JK)=R(JK)+D(J)*D(K)
  147. C
  148.       IF(N-KK) 205, 205, 185
  149. C
  150. C     READ THE REST OF OBSERVATIONS ONE AT A TIME, SUM
  151. C     THE OBSERVATION, AND CALCULATE SUMS OF CROSS-
  152. C     PRODUCTS OF DEVIATIONS FROM TEMPORARY MEANS
  153. C
  154.   185 KK=N-KK
  155.       DO 200 I=1,KK
  156.       JK=0
  157.       CALL DATA (M,D)
  158.       DO 190 J=1,M
  159.       XBAR(J)=XBAR(J)+D(J)
  160.       D(J)=D(J)-T(J)
  161.   190 B(J)=B(J)+D(J)
  162.       DO 200 J=1,M
  163.       DO 200 K=1,J
  164.       JK=JK+1
  165.   200 R(JK)=R(JK)+D(J)*D(K)
  166. C
  167. C     CALCULATE MEANS
  168. C
  169.   205 JK=0
  170.       DO 210 J=1,M
  171.       XBAR(J)=XBAR(J)/FN
  172. C
  173. C     ADJUST SUMS OF CROSS-PRODUCTS OF DEVIATIONS
  174. C     FROM TEMPORARY MEANS
  175. C
  176.       DO 210 K=1,J
  177.       JK=JK+1
  178.   210 R(JK)=R(JK)-B(J)*B(K)/FN
  179. C
  180. C     CALCULATE CORRELATION COEFFICIENTS
  181. C
  182.       JK=0
  183.       DO 220 J=1,M
  184.       JK=JK+J
  185.   220 STD(J)= SQRT( ABS(R(JK)))
  186.       DO 230 J=1,M
  187.       DO 230 K=J,M
  188.       JK=J+(K*K-K)/2
  189.       L=M*(J-1)+K
  190.       RX(L)=R(JK)
  191.       L=M*(K-1)+J
  192.       RX(L)=R(JK)
  193.       IF(STD(J)*STD(K)) 225, 222, 225
  194.   222 R(JK)=0.0
  195.       GO TO 230
  196.   225 R(JK)=R(JK)/(STD(J)*STD(K))
  197.   230 CONTINUE
  198. C
  199. C     CALCULATE STANDARD DEVIATIONS
  200. C
  201.       FN=SQRT(FN-1.0)
  202.       DO 240 J=1,M
  203.   240 STD(J)=STD(J)/FN
  204. C
  205. C     COPY THE DIAGONAL OF THE MATRIX OF SUMS OF CROSS-PRODUCTS OF
  206. C     DEVIATIONS FROM MEANS.
  207. C
  208.       L=-M
  209.       DO 250 I=1,M
  210.       L=L+M+1
  211.   250 B(I)=RX(L)
  212.       RETURN
  213.       END
  214.